package com.learn.SingleTon;

import java.util.HashMap;
import java.util.Map;

/**
 * 登陆式单例使用
 * **登记式单例是Gof为了克服饿汉式和懒汉式单例类均不可被继承的缺点而设计的
 */
public class Register {

    //提供一个私有的HashMap的类型存储Register单例
    private static Map RegisterSingleton = new HashMap();

    //通过静态代码块初始化Register类实例，并将Register中存入RegisterSingleton
    static {
        Register register = new Register();
        RegisterSingleton.put(register.getClass().getName(),register);
    }

    //此处不是private可被继承
    protected Register(){}

    public static Register getInstance(String name){
        //如果为空则使用类的全限定名
        if(name==null){
            name = "com.learn.SingleTon.Register";
        }

        //如果map对象中不存在这个对象则存入
        if(RegisterSingleton.get(name)==null){
            try {
                RegisterSingleton.put(name,Class.forName(name).newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return (Register)RegisterSingleton.get(name);
    }



}
